package com.smdp.service.impl;

import com.smdp.dto.Result;
import com.smdp.entity.UserInfo;
import com.smdp.mapper.UserInfoMapper;
import com.smdp.service.IUserInfoService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.smdp.utils.UserHolder;
import org.springframework.stereotype.Service;

import java.util.Objects;

/**
 * 用户详情信息服务实现类。
 * 包含储存用户详情信息、根据id查询用户详情信息。
 *
 * @author 蔡方珩
 */
@Service
public class UserInfoServiceImpl extends ServiceImpl<UserInfoMapper, UserInfo> implements IUserInfoService {

    /**
     * 存储用户信息。
     * 只能储存自己的用户信息，如果用户id不一致则拒绝储存。
     * @param userInfo 用户信息
     * @return 成功：ok / 失败：失败原因
     */
    @Override
    public Result saveUserInfo(UserInfo userInfo) {
        // 校验用户身份
        Long userId = UserHolder.getUser().getId();
        Long infoUserId = userInfo.getUserId();
        if (!Objects.equals(userId, infoUserId)){
            return Result.fail("只能修改自己的信息！");
        }
        // 存储到数据库
        boolean isSuccess = save(userInfo);
        if (!isSuccess){
            return Result.fail("服务器故障，储存失败");
        }
        return Result.ok();
    }

    /**
     * 根据id查询用户详情信息
     * @param userId 用户id
     * @return 成功：脱敏的用户详情信息 / 失败：失败原因
     */
    @Override
    public Result queryUserInfoById(Long userId) {
        // 查询详情
        UserInfo info = getById(userId);
        if (info == null) {
            // 没有详情，返回空
            return Result.fail("该用户尚未设置用户信息");
        }
        // 用户信息脱敏
        info.setCreateTime(null);
        info.setUpdateTime(null);
        info.setBirthday(null);
        // 返回
        return Result.ok(info);
    }
}
